#-*- coding:utf-8 -*-
class person(object):  ##继承object称为新式类，没有就称为经典类，新式比经典多一些功能
    def __init__(self,name):
        print 'person.init'
    def go(self):
        print 'go'
    def ho(self):
        print 'ho'
    def jo(self):
        print 'jo'
    def __del__(self):
        print '对象最后一刻销毁的时候，永远都是最后一次执行'
    def __call__(self):
        print 'call'
        
class vpanda(person):   ##vpanda继承person类
    def __init__(self):
        print 'vpanda.init'
        person.__init__(self,'vvv')   ##1调用父类构造函数
        super(vpanda,self).__init__('bbb')   ##2用super调用父类构造函数，这个必须继承object
    def ho(self):          ##重写父类的方法
        print 'vpanda ho'
    def jo(self):
        person.jo(self)   ##在父类基础上完善子类功能
        print 'jojo'
        
ren = person('xxx')
ren.go()   ##执行go方法
ren()    ##不指定方法的话，执行类的call方法

x1 = vpanda()
x1.go()   ##类的继承效果，继承person的方法
x1.ho()
x1.jo()

class A(object):
    def __init__(self):
        print 'this is A'
    def test(self):
        print 'this is A.test'
class B(A):
    def __init__(self):
        print 'this is B'
    def test1(self):
        print 'this is B.test'
class C(A):
    def __init__(self):
        print 'this is C'
    def test(self):
        print 'this is C.test'
class D(B,C):  
    def __init__(self):
        print 'this is D'
x=D()
print x.test()  ##继承了前面的B，如果B中找不到test，就继承C，如果C中没有，就去A中找
##如果A不集成object，那么在继承到B以后，会从B继承的A中找到test方法，如果继承object，就会在C中先找到test
#-----------------------------------------------------#输出结果
'''
person.init
go
call
vpanda.init
person.init
person.init
go
vpanda ho
jo
jojo
this is D
this is C.test
None
对象最后一刻销毁的时候，永远都是最后一次执行
对象最后一刻销毁的时候，永远都是最后一次执行
'''